/*
  @Time:   2021-04-18
  @File:   re.go
  @Author: ls
*/
package main

import (
	"fmt"
	"regexp"
)

func main()  {
	str:="select id, name from users where id=2"

	matchByte,_ :=regexp.Match("\\S+",[]byte(str))  //字节形式传递
	fmt.Println(matchByte)

	//re,_:=regexp.MatchString(`"\S+"`,str)  //错误
	match,_:=regexp.MatchString("\\S+",str)  //传递字符串
	fmt.Println(match)

	re,_:=regexp.Compile("\\w+")
	fmt.Println(re.MatchString(str))
	res:=re.FindAllString(str, -1)  //-1表示匹配查找全部
	fmt.Println(res)

	reM:=regexp.MustCompile("\\w+")  //返回一个值*Regexp类型
	resM:=reM.FindAllString(str, -1)  //返回一个切片，包含所有匹配的字符串，-1表示匹配查找全部
	resMIndex:=reM.FindAllStringIndex(str, -1)  //返回一个切片，包含所有匹配的字符串字符的索引，-1表示匹配查找全部
	resMS:=reM.FindAllStringSubmatch(str, -1)  //返回包含子切片的切片，每个单词为一个子切片，-1表示匹配查找全部
	resMSIndex:=reM.FindAllStringSubmatchIndex(str, -1)  //同FindAllStringIndex
	fmt.Println(resM)
	fmt.Println(resMIndex)
	fmt.Println(resMS)
	fmt.Println(resMSIndex)


	fmt.Println(reM.FindString(str))  //返回匹配到的第一个字符串

	rea:= regexp.MustCompile("a*")
	//将re在s中匹配到的结果作为分隔符将s分割成多个字符串，并返回这些正则匹配结果之间的字符串的切片
	//n > 0 返回指定数量
	//n < 0 全部切分
	//n = 0 nil(空)
	s:=rea.Split("nabaabaccadaaae", -1)
	//fmt.Println(s, s[1])
	fmt.Println(s)
}

//结果：
//true
//true
//true
//[select id name from users where id 2]
//[select id name from users where id 2]
//[[0 6] [7 9] [11 15] [16 20] [21 26] [27 32] [33 35] [36 37]]
//[[select] [id] [name] [from] [users] [where] [id] [2]]
//[[0 6] [7 9] [11 15] [16 20] [21 26] [27 32] [33 35] [36 37]]
//select
//[ b b c cadaaae] b

